package com.test.moudle.sys.service;

import com.test.R;
import com.test.moudle.sys.entity.Token;
import com.test.moudle.sys.oauth2.TokenGenerator;
import com.test.moudle.sys.repository.TokenRepository;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.Optional;

@Service
public class TokenService {

    // 过期时间一星期
    private final static int EXPIRE = 3600 * 24 * 7;

    @Resource
    private TokenRepository tokenRepository;


    public R create(Integer userId) {

        // 生成一个token
        String token = TokenGenerator.generateValue();

        // 当前时间
        Date now = new Date();
        // 过期时间
        Date expireTime = new Date(now.getTime() + EXPIRE * 1000);

        // 存在则更新，不存在则创建（已实现多浏览器同时登录，共享token）
        Optional<Token> optional = tokenRepository.findById(userId);
        if (optional.isPresent()) {

            Token tokenEntity = optional.get();
            tokenEntity.setUpdateTime(now);
            tokenEntity.setExpireTime(expireTime);
            tokenEntity = tokenRepository.save(tokenEntity);

            return R.ok().put("data", tokenEntity);
        } else {

            Token tokenEntity = new Token(userId, token, expireTime, now);
            tokenEntity = tokenRepository.save(tokenEntity);

            return R.ok().put("data", tokenEntity);
        }

    }

    public Token findByToken(String token) {
        return tokenRepository.findByToken(token);
    }

    public Token findByUserId(Integer userId) {
        return tokenRepository.findById(userId).get();
    }

    public void delete(Integer userId) {
        // 删除数据库中的token
        tokenRepository.deleteById(userId);
    }

}
